package com.bitoon.basketdudes.web.commons;

import com.bitoon.basketdudes.web.datos.DatosCalendario;
import com.bitoon.basketdudes.web.datos.DatosCalendarioEquipo;
import com.bitoon.basketdudes.web.datos.DatosCalendarioPartido;
import com.bitoon.basketdudes.web.jpa.Partido;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.persistence.*;
import org.apache.log4j.Logger;

public class CalendarioCommon extends BaseCommons {

    private Logger log = Logger.getLogger(CalendarioCommon.class);

    public static int MAX_PARTIDOS_MOSTRAR = 4;
    public static int MAX_PARTIDOS_MOSTRAR_CENTRO = 4;

    public List<DatosCalendario> calendarioPartido(int idEquipo, int pagina) {

        /*
         * Aquí la página tomará los siguientes valores
         *
         * pagina = 0 ==> resultado "central", con los partidos presentes y futuros si los hubiera
         * pagina < 0 (-1, -2, -3, ...) ==> cuando se navegue hacia partidos pasados
         * pagina > 0 (1, 2, 3, ...) ==> cuando se navegue hacia partidos futuros
         *
         */

        EntityManager em = null;
        List<DatosCalendario> retorno = new ArrayList<DatosCalendario>();

        int sPagina = 0, sInf = 0, sSup = 0; // indices almacenados en sesion para la paginacion

        log.debug("calendarioPartido");
        log.debug("pagina: " + pagina);

        try {
            em = emfBasket.createEntityManager(); // checked
            List<Partido> pasados = null;
            List<Partido> futuros = null;

            /*
            if (pagina <= 0) {
                // Primero los pasados
                Query q = em.createNamedQuery("Partido.findPasadosByEquipoId");
                q.setParameter("equipoId", idEquipo);
                q.setMaxResults(MAX_PARTIDOS_MOSTRAR);
                // Habrá que fijar el offset para la paginación
                q.setFirstResult(0);
                pasados = (List<Partido>)q.getResultList();
            }

            if (pagina >= 0) {
                // Consultar los futuros
                Query q = em.createNamedQuery("Partido.findFuturosByEquipoId");
                q.setParameter("equipoId", idEquipo);
                q.setMaxResults(MAX_PARTIDOS_MOSTRAR);
                // Habrá que fijar el offset para la paginación
                q.setFirstResult(0);
                futuros = (List<Partido>)q.getResultList();
            }
             *
             */

            // Mezclar los resultados si pagina == 0

            //log.debug("calendario: pagina = " + pagina);


            // Si no se puede recuperar la pagina de la sesion, mostrar la central
            if (session.get("paginaCalendario")!=null && session.get("infCalendario") != null && session.get("supCalendario") != null) {
                sPagina = (Integer)session.get("paginaCalendario");
                sInf = (Integer)session.get("infCalendario");
                sSup = (Integer)session.get("supCalendario");

                log.debug("sPagina: " + sPagina);
                log.debug("sInf: " + sInf);
                log.debug("sSup: " + sSup);
            } else {
                pagina = 0;
                log.debug("No se ha podido recuperar la info de la session");
            }

            log.debug("calendario: pagina = " + pagina + ", sPagina = " + sPagina + ", sInf = " + sInf + ", sSup = " + sSup);

            if (pagina == 0) {

                int cuantosPasado = 0;
                int cuantosFuturo = 0;

                int lp = 0;
                int lf = 0;

                //Query q = em.createNamedQuery("Partido.findPasadosByEquipoId");
                Query q = em.createNamedQuery("Partido.findPasados");
                q.setFirstResult(0);
                q.setMaxResults(MAX_PARTIDOS_MOSTRAR_CENTRO);
                pasados = (List<Partido>)q.getResultList();

                /*
                q = em.createNamedQuery("Partido.findFuturosByEquipoId");
                q.setParameter("equipoId", idEquipo);
                q.setMaxResults(MAX_PARTIDOS_MOSTRAR_CENTRO);
                q.setFirstResult(0);
                futuros = (List<Partido>)q.getResultList();
                 * 
                 */

                if (pasados != null) {

                    /*
                    Iterator iter = pasados.iterator();
                    while (iter.hasNext()) {
                        Partido i = (Partido)iter.next();
                        //log.debug("p: " + i.getFecha());
                    }
                     * 
                     */
                    lp = pasados.size();
                }

                /*
                if (futuros != null) {
                    lf = futuros.size();
                }
                 *
                 */

                log.debug(">>>>>>>> calendario: lp = " + lp + ", lf = " + lf);

                // Esto, mientras no tengamos partidos futuros, será siempre falso
                if ( (lp >= 2) && (lf >= 2) ) {
                    // Hay suficientes como para poner 2 de cada
                    // PERO primero hay que ver si hay más de dos fechas, para poner sólo 3

                    //log.debug(futuros.get(0).getFecha() + " == " + futuros.get(1).getFecha());
                    //log.debug(pasados.get(0).getFecha() + " == " + pasados.get(1).getFecha());

                    if (futuros.get(0).getFecha().before(futuros.get(1).getFecha())) {
                        // Hay más de una fecha en el futuro
                        log.debug("A");
                        cuantosPasado = 1;
                        cuantosFuturo = 2;
                    } else if (pasados.get(0).getFecha().after(pasados.get(1).getFecha())) {
                        // Hay más de una fecha en el pasado
                        log.debug("B");
                        if (lf > 2) {
                            cuantosFuturo = 3;
                            cuantosPasado = 1;
                        } else {
                            cuantosPasado = 2;
                            cuantosFuturo = 1;
                        }
                    } else {
                        log.debug("C");
                        cuantosPasado = 2;
                        cuantosFuturo = 2;
                    }
                } else {
                    // Si no suman 4 entre los dos, ponerlos todos
                    if ( (lp + lf) < 4) {
                        //log.debug("D");
                        cuantosPasado = lp;
                        cuantosFuturo = lf;
                    } else {
                        // Hay que elegir qué 4 partidos mostrar.
                        // Uno de los dos tiene que valer 1 ó 0

                        if (lp <= 1) {
                            //log.debug("E");
                            cuantosPasado = lp;
                            cuantosFuturo = 4-lp;
                        } else {
                            //log.debug("F");
                            cuantosPasado = 4-lf;
                            cuantosFuturo = lf;
                        }
                    }
                }

                log.debug("cuantosPasado: " + cuantosPasado);
                log.debug("cuantosFuturo: " + cuantosFuturo);

                /*
                if (cuantosPasado > 0) {
                    Date f = pasados.get(0).getFecha();
                    DatosCalendario c = null;
                    int x = 0;
                    Partido p;
                    while (x<cuantosPasado) {
                        int cuantos = 0;
                        
                        p = pasados.get(x);
                        if (x==0 || p.getFecha().after(f)) {
                            // Nueva fecha
                            c = new DatosCalendario();
                            log.debug("Nuevo DatosCalendario");
                            ArrayList<DatosCalendarioPartido> dpa = new ArrayList<DatosCalendarioPartido>();
                            cuantos = 0;
                            //log.debug("x: " + x + ", cuantosPasado: " + cuantosPasado);
                            //log.debug("compare: " + p.getFecha() + ", f: " + f);
                            int xd = 1;
                            while ( (x<cuantosPasado) && (p.getFecha().compareTo(f)==0) ) {
                                p = pasados.get(x);
                                //log.debug("hay partido: " + p.getId());
                                xd = 0;
                                DatosCalendarioPartido dp = new DatosCalendarioPartido();
                                DatosCalendarioEquipo de1 = new DatosCalendarioEquipo();
                                DatosCalendarioEquipo de2 = new DatosCalendarioEquipo();

                                de1.setUsuario(p.getEquipo1().getUsuario().getId());
                                de1.setNombre(p.getEquipo1().getNombre());
                                de1.setNombreUrl(p.getEquipo1().getNombreUrl());
                                de1.setNick(p.getEquipo1().getNick());
                                de1.setLogoimgId(p.getEquipo1().getAspecto().getLogoimgId());
                                dp.setEquipo_1(de1);

                                de2.setUsuario(p.getEquipo2().getUsuario().getId());
                                de2.setNombre(p.getEquipo2().getNombre());
                                de2.setNombreUrl(p.getEquipo2().getNombreUrl());
                                de2.setNick(p.getEquipo2().getNick());
                                de2.setLogoimgId(p.getEquipo2().getAspecto().getLogoimgId());
                                dp.setEquipo_2(de2);

                                dp.setResultado(p.getPuntos1()+"|"+p.getPuntos2());
                                if (p.getPuntos1() > p.getPuntos2()) {
                                    dp.setVictoria("casa");
                                } else {
                                    dp.setVictoria("fuera");
                                }
                                
                                dp.setJugado(1);
                                dp.setId(p.getId());

                                dpa.add(dp);

                                x++;
                                cuantos++;

                            }
                            
                            c.setPartidos(dpa);

                            x+=xd;
                        }

                        c.setCantidad(cuantos);
                        DateFormat df = new SimpleDateFormat("dd/MM");
                        DateFormat dd = new SimpleDateFormat("yyyyMMdd");
                        c.setFecha(df.format(f));
                        c.setDia(dd.format(f));
                        //log.debug("1 retorno: " + retorno);
                        retorno.add(c);

                    }
                }
*/

                if (cuantosPasado > 0) {
                    //Date f = null;
                    String sf = "";
                    DatosCalendario c = null;
                    int x = 0;
                    Partido p;
                    p = pasados.get(x);
                    while (x<cuantosPasado) {
                        int cuantos = 0;

                        // Hay que comparar yyyyMMdd, no la fecha completa
                        DateFormat dd = new SimpleDateFormat("yyyyMMdd");
                        String sfecha = dd.format(p.getFecha());

                        log.debug("sf: " + sf + ", sfecha: " + sfecha);

                        //if (f==null || p.getFecha().before(f)) {
                        if (!sf.equals(sfecha)) {
                            // Nueva fecha
                            //log.debug("comienza nueva fecha: " + p.getFecha());
                            //f = p.getFecha();
                            sf = sfecha;

                            c = new DatosCalendario();
                            log.debug("Nuevo DatosCalendario");
                            ArrayList<DatosCalendarioPartido> dpa = new ArrayList<DatosCalendarioPartido>();
                            cuantos = 0;
                            //log.debug("x: " + x + ", cuantosPasado: " + cuantosPasado);
                            //log.debug("compare: " + p.getFecha() + ", f: " + f);
                            int xd = 1;
                            p = pasados.get(x);
                            boolean seguir = false;

                            //if ( (x<cuantosPasado) && (p.getFecha().compareTo(f)==0) ) {
                            sfecha = dd.format(p.getFecha());
                            if ( (x<cuantosPasado) && (sfecha.equals(sf)) ) {
                                seguir = true;
                            }
                            //while ( (x<cuantosPasado) && (p.getFecha().compareTo(f)==0) ) {
                            while (seguir) {
                                log.debug("Leyendo el pasado " + x);

                                log.debug("hay partido: " + p.getId());
                                xd = 0;
                                DatosCalendarioPartido dp = new DatosCalendarioPartido();
                                DatosCalendarioEquipo de1 = new DatosCalendarioEquipo();
                                DatosCalendarioEquipo de2 = new DatosCalendarioEquipo();

                                de1.setUsuario(p.getEquipo1().getUsuario().getId());
                                de1.setNombre(p.getEquipo1().getNombre());
                                de1.setNombreUrl(p.getEquipo1().getNombreUrl());
                                de1.setNick(p.getEquipo1().getNick());
                                de1.setLogoimgId(p.getEquipo1().getAspecto().getLogoimgId());
                                dp.setEquipo_1(de1);

                                de2.setUsuario(p.getEquipo2().getUsuario().getId());
                                de2.setNombre(p.getEquipo2().getNombre());
                                de2.setNombreUrl(p.getEquipo2().getNombreUrl());
                                de2.setNick(p.getEquipo2().getNick());
                                de2.setLogoimgId(p.getEquipo2().getAspecto().getLogoimgId());
                                dp.setEquipo_2(de2);

                                dp.setResultado(p.getPuntos1()+"|"+p.getPuntos2());
                                if (p.getPuntos1() > p.getPuntos2()) {
                                    dp.setVictoria("casa");
                                } else {
                                    dp.setVictoria("fuera");
                                }

                                dp.setJugado(1);
                                dp.setId(p.getId());

                                // Para los pasados poner hora, potencial, historico
                                dp.setHora("20h00");
                                dp.setPotencial("superior|inferior");
                                dp.setHistorico("12-1");

                                dpa.add(dp);

                                x++;
                                cuantos++;

                                if (x<pasados.size()) {
                                    if (x<cuantosPasado) {
                                        p = pasados.get(x);

                                        //log.debug("Comparando " + p.getFecha() + " con " + f);

                                        sfecha = dd.format(p.getFecha());
                                        //if (p.getFecha().before(f)) {
                                        // 20110203 - 20110130
                                        if ( sfecha.compareTo(sf) < 0 ) {
                                            seguir = false;
                                            //log.debug("cambio nueva fecha: " + p.getFecha());
                                            //f = p.getFecha();
                                        } else {
                                            //log.debug("sigue misma fecha: " + p.getFecha());
                                        }
                                    } else {
                                        seguir = false;
                                    }
                                } else {
                                    seguir = false;
                                }
                            }

                            c.setPartidos(dpa);

                            x+=xd;
                        } else {
                            x++; // Para salir del bucle alguna vez
                            //p = pasados.get(x);
                        }

                        log.debug("fijando cantidad: " + lp);
                        c.setCantidad(lp);
                        DateFormat df = new SimpleDateFormat("dd/MM");
                        c.setFecha(df.format(p.getFecha()));
                        c.setDia(dd.format(p.getFecha()));
                        //log.debug("2 retorno, x: " + x + ", cuantosPasado: " + cuantosPasado);
                        retorno.add(c);
                    }
                }

                // xxx

                // Esto será falso, mientras no tengamos partidos futuros

                /*
                if (cuantosFuturo > 0) {
                    Date f = null;
                    DatosCalendario c = null;
                    int x = 0;
                    Partido p;
                    p = futuros.get(x);
                    while (x<cuantosFuturo) {
                        int cuantos = 0;                        
                        if (f==null || p.getFecha().after(f)) {
                            // Nueva fecha
                            //log.debug("comienza nueva fecha: " + p.getFecha());
                            f = p.getFecha();

                            c = new DatosCalendario();
                            log.debug("Nuevo DatosCalendario");
                            ArrayList<DatosCalendarioPartido> dpa = new ArrayList<DatosCalendarioPartido>();
                            cuantos = 0;
                            //log.debug("x: " + x + ", cuantosFuturo: " + cuantosFuturo);
                            //log.debug("compare: " + p.getFecha() + ", f: " + f);
                            int xd = 1;
                            p = futuros.get(x);
                            boolean seguir = false;
                            if ( (x<cuantosFuturo) && (p.getFecha().compareTo(f)==0) ) {
                                seguir = true;
                            }
                            //while ( (x<cuantosFuturo) && (p.getFecha().compareTo(f)==0) ) {
                            while (seguir) {
                                //log.debug("Leyendo el futuro " + x);
                                
                                //log.debug("hay partido: " + p.getId());
                                xd = 0;
                                DatosCalendarioPartido dp = new DatosCalendarioPartido();
                                DatosCalendarioEquipo de1 = new DatosCalendarioEquipo();
                                DatosCalendarioEquipo de2 = new DatosCalendarioEquipo();

                                de1.setUsuario(p.getEquipo1().getUsuario().getId());
                                de1.setNombre(p.getEquipo1().getNombre());
                                de1.setNombreUrl(p.getEquipo1().getNombreUrl());
                                de1.setNick(p.getEquipo1().getNick());
                                de1.setLogoimgId(p.getEquipo1().getAspecto().getLogoimgId());
                                de1.setAbreviatura(getInicialesEquipo(p.getEquipo1().getNombre(), p.getEquipo1().getNick()));
                                dp.setEquipo_1(de1);

                                de2.setUsuario(p.getEquipo2().getUsuario().getId());
                                de2.setNombre(p.getEquipo2().getNombre());
                                de2.setNombreUrl(p.getEquipo2().getNombreUrl());
                                de2.setNick(p.getEquipo2().getNick());
                                de2.setLogoimgId(p.getEquipo2().getAspecto().getLogoimgId());
                                de2.setAbreviatura(getInicialesEquipo(p.getEquipo2().getNombre(), p.getEquipo2().getNick()));
                                dp.setEquipo_2(de2);

                                dp.setResultado(p.getPuntos1()+"|"+p.getPuntos2());
                                if (p.getPuntos1() > p.getPuntos2()) {
                                    dp.setVictoria("casa");
                                } else {
                                    dp.setVictoria("fuera");
                                }

                                dp.setJugado(0);
                                dp.setId(p.getId());

                                // Para los futuros poner hora, potencial, historico
                                dp.setHora("20h00");
                                dp.setPotencial("superior|inferior");
                                dp.setHistorico("12-1");

                                dpa.add(dp);

                                x++;
                                cuantos++;

                                if (x<futuros.size()) {
                                    if (x<cuantosFuturo) {
                                        p = futuros.get(x);

                                        //log.debug("Comparando " + p.getFecha() + " con " + f);

                                        if (p.getFecha().after(f)) {
                                            seguir = false;
                                            //log.debug("cambio nueva fecha: " + p.getFecha());
                                            //f = p.getFecha();
                                        } else {
                                            //log.debug("sigue misma fecha: " + p.getFecha());
                                        }
                                    } else {
                                        seguir = false;
                                    }
                                } else {
                                    seguir = false;
                                }
                            }

                            c.setPartidos(dpa);

                            x+=xd;
                        } else {
                            x++; // Para salir del bucle alguna vez
                            p = futuros.get(x);
                        }

                        c.setCantidad(cuantos);
                        DateFormat dd = new SimpleDateFormat("yyyyMMdd");
                        DateFormat df = new SimpleDateFormat("dd/MM");
                        c.setFecha(df.format(f));
                        c.setDia(dd.format(f));
                        //log.debug("2 retorno, x: " + x + ", cuantosFuturo: " + cuantosFuturo);
                        retorno.add(c);
                    }
                }
                 * 
                 */

                session.put("paginaCalendario", 0);
                session.put("infCalendario", cuantosPasado);
                session.put("supCalendario", cuantosFuturo);

            } else {

                // La página será mayor o menor que la almacenada en sesión

                log.debug("no es la pagina central");
                
                int difPagina = pagina - sPagina;

                if (difPagina > 0) {
                    // Página siguiente

                    // Consultar los seis siguientes partidos a partir de sSup
                    Query q = em.createNamedQuery("Partido.findFuturosByEquipoId");
                    q.setParameter("equipoId", idEquipo);
                    q.setMaxResults(MAX_PARTIDOS_MOSTRAR);
                    // Habrá que fijar el offset para la paginación
                    q.setFirstResult(sSup);
                    futuros = (List<Partido>)q.getResultList();

                    log.debug("siguiente futuros: " + futuros + ", size: " + futuros.size());

                    // Hay que ver si hay 1,2 ó 3 fechas para devolver 6,4 ó 3 partidos

                    // xxx

                    if (futuros.size() > 0) {
                        Date f = futuros.get(0).getFecha();
                        DatosCalendario c = null;
                        int x = 0;
                        Partido p;
                        boolean seguir = true;
                        int numFechas = 0;
                        while (seguir) {
                            int cuantos = 0;
                            p = futuros.get(x);
                            if (x==0 || p.getFecha().before(f)) {
                                // Nueva fecha
                                numFechas++; // Nueva fecha
                                c = new DatosCalendario();
                                log.debug("Nuevo DatosCalendario");
                                ArrayList<DatosCalendarioPartido> dpa = new ArrayList<DatosCalendarioPartido>();
                                cuantos = 0;
                                //log.debug("x: " + x + ", numFechas: " + numFechas);
                                //log.debug("compare: " + p.getFecha() + ", f: " + f);
                                int xd = 1;
                                while (seguir) {
                                    p = futuros.get(x);
                                    //log.debug("hay partido: " + p.getId());
                                    xd = 0;
                                    DatosCalendarioPartido dp = new DatosCalendarioPartido();
                                    DatosCalendarioEquipo de1 = new DatosCalendarioEquipo();
                                    DatosCalendarioEquipo de2 = new DatosCalendarioEquipo();

                                    de1.setUsuario(p.getEquipo1().getUsuario().getId());
                                    de1.setNombre(p.getEquipo1().getNombre());
                                    de1.setNombreUrl(p.getEquipo1().getNombreUrl());
                                    de1.setNick(p.getEquipo1().getNick());
                                    de1.setLogoimgId(p.getEquipo1().getAspecto().getLogoimgId());
                                    de1.setAbreviatura(getInicialesEquipo(p.getEquipo1().getNombre(), p.getEquipo1().getNick()));
                                    dp.setEquipo_1(de1);

                                    de2.setUsuario(p.getEquipo2().getUsuario().getId());
                                    de2.setNombre(p.getEquipo2().getNombre());
                                    de2.setNombreUrl(p.getEquipo2().getNombreUrl());
                                    de2.setNick(p.getEquipo2().getNick());
                                    de2.setLogoimgId(p.getEquipo2().getAspecto().getLogoimgId());
                                    de2.setAbreviatura(getInicialesEquipo(p.getEquipo2().getNombre(), p.getEquipo2().getNick()));
                                    dp.setEquipo_2(de2);

                                    dp.setResultado(p.getPuntos1()+"|"+p.getPuntos2());
                                    if (p.getPuntos1() > p.getPuntos2()) {
                                        dp.setVictoria("casa");
                                    } else {
                                        dp.setVictoria("fuera");
                                    }

                                    dp.setJugado(0);
                                    dp.setId(p.getId());

                                    // Para los futuros poner hora, potencial, historico
                                    dp.setHora("20h00");
                                    dp.setPotencial("superior|inferior");
                                    dp.setHistorico("12-1");

                                    dpa.add(dp);

                                    x++;
                                    cuantos++;

                                    // Actualizar seguir

                                    if (x>=6) {
                                        seguir = false;
                                    } else if (numFechas == 2 && x>=4) {
                                        seguir = false;
                                    } else if (numFechas == 3 && x>=3) {
                                        seguir = false;
                                    } else if (x >= futuros.size()) {
                                        seguir = false;
                                    }
                                }

                                c.setPartidos(dpa);

                                x+=xd;
                            }

                            c.setCantidad(cuantos);
                            DateFormat dd = new SimpleDateFormat("yyyyMMdd");
                            DateFormat df = new SimpleDateFormat("dd/MM");
                            c.setFecha(df.format(f));
                            c.setDia(dd.format(f));
                            //log.debug("3 retorno: " + retorno);
                            retorno.add(c);
                        }

                        sSup += x;
                        //log.debug("nuevo sSup: " + sSup);
                        session.put("supCalendario", sSup);
                    }

                    // xxx


                } else {
                    // Página anterior

                    // Consultar los seis siguientes partidos a partir de sInf
                    //Query q = em.createNamedQuery("Partido.findPasadosByEquipoId");
                    Query q = em.createNamedQuery("Partido.findPasados");
                    //q.setParameter("equipoId", idEquipo);
                    q.setFirstResult(sInf);
                    q.setMaxResults(MAX_PARTIDOS_MOSTRAR);
                    // Habrá que fijar el offset para la paginación
                    pasados = (List<Partido>)q.getResultList();

                    //log.debug("siguiente pasados: " + pasados + ", size: " + pasados.size());

                    // Hay que ver si hay 1,2 ó 3 fechas para devolver 6,4 ó 3 partidos

                    // xxx

                    if (pasados.size() > 0) {
                        Date f = pasados.get(0).getFecha();
                        DatosCalendario c = null;
                        int x = 0;
                        Partido p;
                        boolean seguir = true;
                        int numFechas = 0;
                        while (seguir) {
                            int cuantos = 0;
                            p = pasados.get(x);
                            if (x==0 || p.getFecha().before(f)) {
                                // Nueva fecha
                                numFechas++; // Nueva fecha
                                c = new DatosCalendario();
                                log.debug("Nuevo DatosCalendario");
                                ArrayList<DatosCalendarioPartido> dpa = new ArrayList<DatosCalendarioPartido>();
                                cuantos = 0;
                                //log.debug("x: " + x + ", numFechas: " + numFechas);
                                //log.debug("compare: " + p.getFecha() + ", f: " + f);
                                int xd = 1;
                                while (seguir) {
                                    p = pasados.get(x);
                                    //log.debug("hay partido: " + p.getId());
                                    xd = 0;
                                    DatosCalendarioPartido dp = new DatosCalendarioPartido();
                                    DatosCalendarioEquipo de1 = new DatosCalendarioEquipo();
                                    DatosCalendarioEquipo de2 = new DatosCalendarioEquipo();

                                    de1.setUsuario(p.getEquipo1().getUsuario().getId());
                                    de1.setNombre(p.getEquipo1().getNombre());
                                    de1.setNombreUrl(p.getEquipo1().getNombreUrl());
                                    de1.setNick(p.getEquipo1().getNick());
                                    de1.setLogoimgId(p.getEquipo1().getAspecto().getLogoimgId());
                                    de1.setAbreviatura(getInicialesEquipo(p.getEquipo1().getNombre(), p.getEquipo1().getNick()));
                                    dp.setEquipo_1(de1);

                                    de2.setUsuario(p.getEquipo2().getUsuario().getId());
                                    de2.setNombre(p.getEquipo2().getNombre());
                                    de2.setNombreUrl(p.getEquipo2().getNombreUrl());
                                    de2.setNick(p.getEquipo2().getNick());
                                    de2.setLogoimgId(p.getEquipo2().getAspecto().getLogoimgId());
                                    de2.setAbreviatura(getInicialesEquipo(p.getEquipo2().getNombre(), p.getEquipo2().getNick()));
                                    dp.setEquipo_2(de2);

                                    dp.setResultado(p.getPuntos1()+"|"+p.getPuntos2());
                                    if (p.getPuntos1() > p.getPuntos2()) {
                                        dp.setVictoria("casa");
                                    } else {
                                        dp.setVictoria("fuera");
                                    }

                                    dp.setJugado(1);
                                    dp.setId(p.getId());

                                    dpa.add(dp);

                                    x++;
                                    cuantos++;

                                    // Actualizar seguir

                                    if (x>=6) {
                                        seguir = false;
                                    } else if (numFechas == 2 && x>=4) {
                                        seguir = false;
                                    } else if (numFechas == 3 && x>=3) {
                                        seguir = false;
                                    } else if (x >= pasados.size()) {
                                        seguir = false;
                                    }
                                }

                                c.setPartidos(dpa);

                                x+=xd;
                            }

                            c.setCantidad(cuantos);
                            DateFormat dd = new SimpleDateFormat("yyyyMMdd");
                            DateFormat df = new SimpleDateFormat("dd/MM");
                            c.setFecha(df.format(f));
                            c.setDia(dd.format(f));
                            //log.debug("3 retorno: " + retorno);
                            retorno.add(c);
                        }

                        sInf += x;
                        //log.debug("nuevo sInf: " + sInf);
                        session.put("infCalendario", sInf);
                    }

                    // xxx
                }

            }

            session.put("paginaCalendario", pagina);


            return retorno;
            
        } catch (Exception e) {
            log.error("No se pudo leer el calendario del equipo " + idEquipo, e);
        } finally {
            try { em.close(); } catch (Exception e) { }
        }

        return retorno;
    }

}
